﻿/*
 * 在这个项目中，您可以了解到：
 * 如何使用 try-catch 捕捉异常
 */

using System;

namespace Bf答题系统plus
{
    class Program
    {
        static void Main(string[] args)
        {
            Random randomGenerator = new Random();
            int score = 0;
            for (int restCount = 4; restCount >= 0; restCount--)
            {
                var value1 = randomGenerator.Next(0, 10);
                var value2 = randomGenerator.Next(0, 10);

                Console.Write($"{value1} + {value2} = ");
                string input = Console.ReadLine();

                /*
                 * 一些操作可能引发异常，它们可以被 try-catch 语句捕获。
                 * 
                 * 异常在运行期间出现的，并不是指编写程序时出现的错误或警告。
                 * 异常并不一定要捕获，对于未知原因的产生的异常通常不做处理，直接交由外界。
                 * 
                 * 将可能异常的代码放在 try 块中，
                 * 一旦在其中出现异常，将立即跳转到 catch 块， try 块中的内容将不会再执行。
                 * 如果没有出现异常， catch 块永远不被执行。
                 * 
                 * try-catch 还可以配合 finally 使用，此处暂时不作介绍。
                 */
                try
                {
                    /*
                     * 以下这句语句的 int.Parse 就会引发异常。
                     * 如 FormatException 表示输入内容格式不正确，比如尝试将 "abc" 转换；
                     * 如 OverflowException 表示输入值过大或过小， int 已不足以表示。
                     * 
                     * 使用 F1 可以了解详细信息。
                     */
                    var inputValue = int.Parse(input);
                    if (inputValue == value1 + value2)
                    {
                        score++;
                        Console.WriteLine($"答对辣！还有 {restCount} 题哦！");
                    }
                    else
                        Console.WriteLine($"答错了，太可惜了。还有 {restCount} 题哦！");
                }
                /*
                 * catch 块可以捕捉指定的异常，也可以什么都不写捕捉全部异常。
                 * 与 if-elseif-else 相似，一个 try 块可以有多个 catch 块。
                 */
                catch (FormatException)
                {
                    restCount++;
                    Console.WriteLine("你输入的是什么鸭！这题作废重来吧！");
                }
                catch (OverflowException e)
                {
                    Console.WriteLine($"输入这么大的数干嘛鸭……你看看都出现异常了：{e}");
                }
            }
            Console.WriteLine($"得分：{score} / 5");
        }
    }
}
